home *** CD-ROM | disk | FTP | other *** search
/ FishMarket 1.0 / FishMarket v1.0.iso / fishies / 126-150 / disk_141 / sbprolog / c_source.zoo / changes next >
Text File  |  1988-03-18  |  8KB  |  223 lines

  1. Copyright 1988 by David A. Roch
  2. .sp
  3. Any or all of this document may be redistributed without
  4. charge provided the above copyright notice is included. 
  5. .PP
  6. This document (such as it is), describes a port of 
  7. Stony Brook Prolog (version 2.3.2) to a Commodore-Amiga
  8. 1000 microcomputer.  I would also like to thank Scott
  9. Evernden for allowing me to incorporate 
  10. changes he made in his port.
  11. .PP
  12. In my port, I never remove original code which will prevent
  13. the system from running on UNIX (TM AT&T).  
  14. All of the changes that would prevent execution on a UNIX
  15. box are accomplished by using pre\-processor conditional
  16. branches.  The symbol MICRO must then be defined at compile
  17. time.  Note that I have not changed the make files.
  18. Also, pleas note that many of the MICRO changes are
  19. specific to the Commodore-Amiga.
  20. .PP
  21. The Amiga operating system, currently does not support
  22. environment variables other than assigning names to a 
  23. specific path (logical devices).  Therefore, it was 
  24. necessary to add a new
  25. flag to the simulator in order to pass the SIMPATH variable.
  26. (See changes to file init.c).
  27. Unfortunately, this makes SIMPATH static unless a new builtin
  28. is added to change the path.  I chose not to do this, as there
  29. are rumors of AmigaDOS 1.3 possibly having environment vars.
  30. Also, the getenv builtin (in file builtin/other.c) must
  31. be changed to always return the SIMPATH.  This is unfortunate,
  32. but necessary as the run time read loop frequently requests the
  33. value of SIMPATH.  To the best of my knowledge, this is the only
  34. environment variable the system ever requests.  Finally, I changed
  35. the seperator for directories in SIMPATH.  UNIX uses
  36. ':' to separate paths, but as this indicates a logical device
  37. name in AmigaDOS, I replaced it with '!'.
  38. It can
  39. easily be changed by setting the preprocessor symbol SEPARATOR
  40. (file loader.c),
  41. and the references to ':' in modlib/modlib_src/$readloop.P.
  42. .PP
  43. The following is a list of files and the changes I have made
  44. to them.
  45. .sp 3
  46. File index.h
  47. .PP
  48. Sets the flag INDEX so that aux.h knows whether or not
  49. to define indextab as an external.
  50.  
  51. .sp
  52. File aux.h
  53. .PP
  54. If INDEX is defined, indextab becomes an external and the
  55. indexing macros are not included (as they were defined in
  56. index.h).  Prior to this, indextab was defined in every
  57. file (without being declared an external).
  58. .sp
  59. Files main.c
  60. .PP
  61. The routine call_sub should check for the interrupt
  62. character.  In Lattice C 4.0 for the Amiga, this
  63. is done with the chkabort routine.  (Thanks to Scott
  64. Evernden).
  65. .sp
  66. File sub_inst.c
  67. .PP
  68. Interrupts must be changed for the microcomputer to which the
  69. system is being ported.  It is likely
  70. that the sigvec (signal vector) does not exist.  Therefore,
  71. arm_intercept must be modified to set the interrupt signal.
  72.  
  73. .sp
  74. File load.c
  75. .PP
  76. <stdio.h> commented out as it is already included in sim.h.
  77.  
  78. .sp
  79. File loader.c
  80. .PP
  81. The colon ':' is no
  82. longer hardcoded as the directory seperator for SIMPATH.  It
  83. is defined by the preprocessor label SEPERATOR.  Also, the
  84. character string simulation_path has been added to allow for the
  85. new runtime option -i for systems without environment variables.
  86. Some hacking was also necessary due to the different file
  87. structure of Amiga DOS.  Amiga DOS thus not support links, and
  88. hence there is not a character for local directories ('.').  I
  89. have solved this by invoking the loader on everything past the './'.
  90. This works for the loader, but not all code.  For example, the
  91. $exists will fail for the query $exists('./some_file') even if
  92. some_file does exist in the local directory.
  93. Also, while UNIX (TM AT&T) uses '/' for the root directory,
  94. Amiga DOS uses logical device names ending in a colon ':'.  I
  95. scan for the colon and invoke the loader if it is present.  
  96. The function call to getenv("SIMPATH") first checks if simulation_path 
  97. is non NULL.  If simulation_path is non NULL, getenv is not invoked
  98. and simulation_path is returned.  Otherwise, getenv("SIMPATH") is
  99. invoked.
  100. Additionally, index.h is now
  101. included here.  There was no reference at all to this file previously.
  102.  
  103. .sp
  104. File init.c
  105. .PP
  106. The modifications to this file permit the user to pass the -i SIMPATH
  107. flag.  An external reference to simulation_path has been added, and the
  108. variable is originally set to NULL by init_sim.  If the -i parameter
  109. is present, the simulation_path is set by a switch statement.  A case for
  110. the i option must also be added in the procedures init_sym & 
  111. init_loading.  This is to allow these procedure to strip out the -i
  112. option when parsing the command line.  Note that the case for 'i'
  113. must be placed before the action to increment the loop variable.
  114. This is necessary as i is followed by an argument.
  115.  
  116. .sp
  117. File builtin/builtin.h
  118. .PP
  119. The references to a parent directories must be changed from '..' to '/'.
  120.  
  121. .sp
  122. File builtin/file.c
  123. .PP
  124. The header file <netdb.h> has been set to compile only if flag MICRO
  125. is undefined.  Furthermore, the function b_GETHOSTBYNAME prints an
  126. error message to standard out and calls fail0.  Also, the include
  127. <stdio.h> has been removed as it is already included in sim.h (which
  128. is included in builtin.h).  
  129.  
  130. .sp
  131. File builtin/other.c
  132. .PP
  133. Include files <netdb.h>, <sys/socket.h>, <netinet/in.h>, and
  134. <arpa/inet.h> all set to be included only if MICRO undefined.
  135. Networking calls based on these (b_BROCALL with register R1
  136. in the range of 21-46) are also compiled only if MICRO is
  137. undefined.  Finally,
  138. the getenv call (R1 = 2) returns simulation_path whenever
  139. simulation_path is non NULL.  As simulation_path should only be
  140. set when there are no environment variables, this should be an
  141. acceptable change.
  142.  
  143. .sp
  144. File builtin/time.c
  145. .PP
  146. The include file <sys/resource.h> has been changed to only be included
  147. if MICRO is undefined as most micros don't have resource tracking.
  148. The routines b_CPUTIME and b_STATISTICS have been modified to
  149. get the Amiga CPU time (thanks Scott).
  150.  
  151. .sp
  152. File builtin/saverest.c
  153. .PP
  154. Removed the include <stdio.h> as redundant, and changed the
  155. name of <sys/file.h> to <fcntl.h> (Lattice C file control).
  156. Also changed notation for including a parent file from '..'
  157. to '/'.  Finally, the numerous includes could probably be
  158. replaced by one include to builtin.h
  159.  
  160. .sp
  161. File modlib/modlib_src/$readloop.P
  162. .PP
  163. If the SEPARATOR character (see loader.c) is changed for the SIMPATH
  164. environment variable (or equivalently, the new -i flag), 
  165. $readloop.P must be changed as it parses the SIMPATH variable.
  166. Unfortunately, to recompile requires a working version of SBP.
  167. This leaves the user with two alternatives:
  168. .nf
  169.     1 - Make the change and compile on a working system
  170.     2 - Set up the simulator to work with the ':' as 
  171.         SEPARATOR, make the change & recompile
  172.         $readloop.P, and finally recompile SBP
  173.         with the new SEPARATOR character.
  174. .fi
  175. .sp
  176. NEW FILES:
  177. .sp
  178. sim/builtin/syscall.h
  179. .PP
  180. This is simply a recreation of the Berkely syscall.h
  181. header file which is naturally not available on 
  182. non\-Berkely UNIX machines.
  183.  
  184. .sp
  185. sim/builtin/syscall.c
  186. .PP
  187. This file contains one function which is designed to
  188. emulate the Berkeley UNIX syscall function.
  189. Assuming you do not wish to try to emulate sockets,
  190. the only function I have found so far that is absolutely
  191. necessary is the SYS_ACCESS function.  Below is my 
  192. implementation for the Amiga.
  193. .nf
  194. /*
  195. syscall.c by David Roch
  196. This routine translates some of the Berkely Unix (tm)
  197. system calls to the Amiga.
  198. */
  199.  
  200. #include <stdio.h>
  201. #include "syscall.h"
  202.  
  203. syscall(n, arg1, arg2, arg3, arg4, arg5, arg6, arg7)
  204. int    n;
  205. call_args    arg1, arg2, arg3, arg4, arg5, arg6, arg7;
  206. {
  207.     switch (n) {
  208.  
  209.         case SYS_chdir:
  210.             return(chdir(arg1));
  211.         case SYS_chmod:
  212.             return(chmod(arg1, arg2));
  213.         case SYS_access:
  214.             return(access(arg1, arg2));
  215.         default:
  216.             printf("System call %d has not yet been implemented in this port of SBProlog.\n",
  217.                 "If you wish to add this system primitive, you must add the proper case\n",
  218.                 "statement to the C source file syscall.c and recompile.\n");
  219.             return(-1); /* command failed (hopefully) */
  220.         }
  221. }
  222. .fi
  223.